void main() {
  // 字符串及其拼接
  // String str = '''ddddd
  // ddddd
  // ddddd''';
  // String str2 = '你好';
  // print('$str$str2');

  // 数字类型 double可以是整型和浮点型，int只能是整型
  // int a = 123;
  // print(a);

  // double b = 12.1;
  // print(b);

  // 布尔类型
  // bool a = false;
  // print(a);

  // 类型不会被转换
  // var a = 123;
  // var b = '123';
  // if (a == b) {
  //   print('a=b');
  // } else {
  //   print('a !=b');
  // }

  // list类型
  // var list = ['张三', 20, true];
  // print(list[0]);
  // print(list.length);

  // 指定list元素的类型,类型必须要符合，不然会报错
  // 通过[]创建的集合内容可变
  // 可修改数组的长度
  // var list = <String>['1'];
  // print(list);
  // list.add('李四');
  // print(list);

  // var list = ['李四', 20];
  // list.add(true);
  // print(list);
  // list.length = 0;
  // print(list);

// 新版dart不能这样定义数组
  // var list = new List();
  // print(list);

// 长度已被固定，不可添加元素,不可修改长度，但是可以修改元素，元素类型必须一致,
  // var list = List<String>.filled(2, 2);
  // print(list);
  // list[0] = 1;
  // print(list);

// 创建对象 不能插入属性？
  // var person = {'name': '张三', 'age': 12};
  // print(person['name']);

// 可以插入属性
  // var person = new Map();
  // person['name'] = '张三';
  // print(person);

// is关键字判断变量类型
  // var str = 233;
  // if (str is String) {
  //   print('is String');
  // } else {
  //   print('is int');
  // }

  // ??操作符  先判断b是否有值，有则不执行，没值则赋值
  // var a = 23;
  // var b;
  // b ??= a;
  // print(b);

  // var a = 13;
  // a += 10;
  // print(a);

// 三目运算符
  // var flag = true;
  // var c;
  // if (flag) {
  //   c = 'true';
  // } else {
  //   c = 'false';
  // }
  // print(c);

  // var flag = false;
  // var c = flag ? 'true' : 'false';
  // print(c);

// ?? a有值则赋值为b ,否则将10赋值给b
  // var a = 22;
  // var b = a ?? 10;
  // print(b);

  // 数据的相互转换
  // String str = '11111';
  // int b = int.parse(str);
  // print(str);
  // print(b);
  // print(b is int);

  // String str = '11.2';
  // var b = double.parse(str);
  // print(b is double);

  // empty方法
  // var str = '';
  // if (str.isEmpty) {
  //   print('str is empty');
  // } else {
  //   print('str is  not empty');
  // }

  // var num;
  // if (num == null) {
  //   print('num is null');
  // }

  // NaN
  // var a = 0 / 0;
  // print(a);

// 自增和自减  ++在前面先运算再赋值，在后则先赋值再运算
  // int a = 10;
  // int b = ++a;
  // print(b); // 11

  // for (int k = 0; k < 50; k++) {
  //   if (k % 2 == 0) {
  //     print(k);
  //   }
  // }

  // int sum = 0;
  // for (int k = 0; k < 101; k++) {
  //   sum += k;
  // }
  // print(sum);

  // int sum = 1;
  // for (int k = 1; k <= 5; k++) {
  //   sum *= k;
  // }
  // print(sum);

  // List list = [1, 2, 3, 4];
  // for (int k = 0; k < list.length; k++) {
  //   print(list[k]);
  // }

  // 遍历复杂数组
  // List list = [
  //   {
  //     'title': '1111',
  //   },
  //   {
  //     'title': '222',
  //   },
  //   {
  //     'title': '222',
  //   },
  // ];

  // for (int k = 0; k < list.length; k++) {
  //   print(list[k]);
  // }

  // int i = 1;
  // while (i <= 10) {
  //   print(i);
  //   i++;
  // }

  // List的方法

  // List list = <String>['香蕉', '苹果'];
  // print(list);
  // list.add('草莓');
  // print(list.length);

  // List list = [1, 2, 3];
  // print(list.reversed.toList());
  // list.add(5);
  // print(list);
  // list.addAll([4, 5, 6, 3]);
  // print(list);
  // print(list.indexOf(7));
  // list.remove(3);
  // list.removeAt(0);
  // print(list);

  // list.fillRange(1, 2, 'aaa');
  // list.insert(1, 'aaa');
  // list.insertAll(1, [3, 3, 4]);
  // String str = list.join('=');
  // print(str);

  // 字符串转数组
  // String str = '1-2-3';
  // print(str.split('-'));

  // Set 没有顺序且不能重复,用于数组去重

  // var set = new Set();
  // set.add('苹果');
  // set.add('香蕉');
  // print(set);
  // print(set.toList());

  // var list = ['苹果', '香蕉', '苹果'];
  // var set = new Set();
  // set.add('苹果');
  // set.addAll(list);
  // print(set);
  // print(set.toList());

  // Map 映射类型 keys  values
  // var person = {
  //   "name": '张三',
  //   "age": 12,
  // };
  // print(person.keys.toList());
  // print(person.values.toList());
  //
  // var per = new Map();
  // per['name'] = '张三';
  // print(per);
  //
  // Map per1 = {
  //   "name": "张三111",
  // };
  // print(per1['name']);

  // Map map = {};
  // print(map.isNotEmpty);
  // map.addAll({
  //   'name': 'zs',
  //   'age': 12,
  // });
  // print(map);

  // map.remove('name');
  // print(map);

//   print(map.containsKey('name'));
//   print(map.containsValue(12));

// list 遍历方法
//    List list = ['张三', '李四', '王五'];
//    for (var key in list) {
//      print(key);
//    }
//
//    list.forEach((element) {
//      print(element);
//    });

// list 的每一项乘以二，返回一个新list
//   List list = [1, 2, 3, 4, 5];
  // List List1 = [];
  // for (int k = 0; k <  list.length; k++) {
  //   List1.add(list[k]*2);
  // };
  // print(List1);

  // for (int key in list) {
  //   List1.add(key*2);
  // }
  // print(List1);
  // list.forEach((element){
  //   List1.add(element*2);
  // });
  // print(List1);

  // var tempList = list.map((value) {
  //     return value*2;
  // });
  // print(tempList);

  // var tempList = list.where((value) {
  //   return value > 2;
  // });
  // print(tempList.toList());


  // var temp = list.any((value) {
  //   return value > 4;
  // });
  // print(temp);
  //
  // var temp1 = list.every((value) {
  //   return value > 0;
  // });
  // print(temp1);


  // forEach遍历List Map Set
  // List list = <int>[1,  2, 3, 4];
  // list.forEach((element) => print(element));

  // Map person = {
  //   'name': '张三',
  //   'age': 19,
  // };
  // person.forEach((key, value) {
  //   print('$key------$value');
  // });


  // Set set = {};
  // set.add('name');
  // set.add('age');
  // set.forEach((element) {
  //   print(element);
  // });





//函数
//   int getNum(){
//     return 1;
//   }
//
//   String getStr() {
//     return '张三';
//   }
//
//   List getList() {
//     return [];
//   }
//
//   print(getNum());
//   print(getStr());
//   print(getList());


// 定义计算函数
// int getSum (int num) {
//   int sum = 0;
//   for (int k = 0; k < num; k++)  {
//     sum += num;
//   }
//   return sum;
// }
//
// int sum = getSum(60);
// print(sum);


// String printUserInfo (String userName, int age) {
//   return '姓名：$userName--------年龄：$age';
// }
// String userInfo = printUserInfo('张三', 88);
// print(userInfo);

// 函数设置可选参数
//   String printUserInfo (String userName, [age]) {
//     if(age !=  null) {
//       return '姓名：$userName--------年龄：$age';
//     } else {
//       return '姓名：$userName--------年龄：保密';
//     }
//   }
//   String userInfo = printUserInfo('张三', 19);
//   print(userInfo);


// 函数设置默认参数
//   String printUserInfo (String userName, [int age = 19]) {
//     return '姓名：$userName--------年龄：$age';
//   }
//   String userInfo = printUserInfo('张三');
//   print(userInfo);

// 函数定义命名参数 ，命名参数名称必须对应
//   String printUserInfo (String userName, {int age = 19, String like = '骑马'}) {
//     return '姓名：$userName--------年龄：$age----爱好：$like';
//   }
//   String userInfo = printUserInfo('张三', age: 13, like: '打猎');
//   print(userInfo);

// forEach的箭头函数 代码只能写一行
// List list  = ['香蕉', '苹果', '橘子'];
// list.forEach((value) => print(value));


// 匿名函数
// var printNum = (value)  {
//   print(value);
// };
// printNum(12);
//
// // 自执行函数
//   ((val) {
//     print(val);
//   })(14);

  Person obj = new Person();
  print(obj.name);
  obj.setInfo(15);
  obj.getInfo();


}
class Person {
    String name = '张三';
    int age = 19;
    void getInfo() {
      print('年龄：${age}, 姓名：$name');
    }
    void setInfo(int age) {
      this.age = age;
    }

    // 构造函数，在实例化时被自动触发
    Person() {
      print('------');
    }
}
